#ifdef USAGECOROUTINE
#ifndef COROUTINEHOOK_H
#define COROUTINEHOOK_H

#define _GNU_SOURCE //必须放在开头

#ifdef __linux__
#include <dlfcn.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/epoll.h>
#include <unistd.h>
#endif // __linux__

#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>

#include "commonhead.h"
#include "coroutineC.h"


#ifdef __linux__
// 原始accept函数指针
typedef int (*accept_t)(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
// 原始recv函数指针
typedef ssize_t (*recv_t)(int sockfd, void *buf, size_t len, int flags);
// 原始send函数指针
typedef ssize_t (*send_t)(int sockfd, void *buf, size_t len, int flags);

// Hook后的read函数
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
// Hook后的recv函数
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
// Hook后的send函数
ssize_t send(int sockfd, const void *buf, size_t len, int flags);

// 初始化Hook
void init_hooks();
#endif // __linux__

#endif // COROUTINEHOOK_H

#endif